package com.ruoyi.admin.service.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.ruoyi.admin.domain.ZhxComment;
import com.ruoyi.admin.domain.ZhxLikeJielong;
import com.ruoyi.admin.domain.ZhxNote;
import com.ruoyi.admin.mapper.ZhxCommentMapper;
import com.ruoyi.admin.mapper.ZhxNoteMapper;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.admin.mapper.ZhxLikeCommentMapper;
import com.ruoyi.admin.domain.ZhxLikeComment;
import com.ruoyi.admin.service.IZhxLikeCommentService;

/**
 * 用户点赞评论Service业务层处理
 * 
 * @author ruoyi
 * @date 2024-11-11
 */
@Service
public class ZhxLikeCommentServiceImpl implements IZhxLikeCommentService 
{
    @Autowired
    private ZhxLikeCommentMapper zhxLikeCommentMapper;

    @Autowired
    private ZhxCommentMapper zhxCommentMapper;

    @Autowired
    private ZhxNoteMapper zhxNoteMapper;

    @Autowired
    private RedisCache redisCache;

    /**
     * 查询用户点赞评论
     * 
     * @param likeCommentId 用户点赞评论主键
     * @return 用户点赞评论
     */
    @Override
    public ZhxLikeComment selectZhxLikeCommentByLikeCommentId(Long likeCommentId)
    {
        return zhxLikeCommentMapper.selectZhxLikeCommentByLikeCommentId(likeCommentId);
    }

    /**
     * 查询用户点赞评论列表
     * 
     * @param zhxLikeComment 用户点赞评论
     * @return 用户点赞评论
     */
    @Override
    public List<ZhxLikeComment> selectZhxLikeCommentList(ZhxLikeComment zhxLikeComment)
    {
        return zhxLikeCommentMapper.selectZhxLikeCommentList(zhxLikeComment);
    }

    /**
     * 新增用户点赞评论
     *
     * @param zhxLikeComment 用户点赞评论
     * @return 结果
     */
    @Override
    public int insertZhxLikeComment(ZhxLikeComment zhxLikeComment)
    {
        zhxLikeComment.setCreateTime(DateUtils.getNowDate());
        return zhxLikeCommentMapper.insertZhxLikeComment(zhxLikeComment);
    }

    /**
     * 新增用户点赞评论
     * 评论点赞数+1
     * @param zhxLikeComment 用户点赞评论
     * @return 结果
     */
    @Override
    public int insertZhxLikeCommentTodo(ZhxLikeComment zhxLikeComment)
    {
        ZhxComment zhxComment = zhxCommentMapper.selectZhxCommentByCommentId(zhxLikeComment.getCommentId());
        zhxComment.setLikeNum(zhxComment.getLikeNum() + 1);
        zhxCommentMapper.updateZhxComment(zhxComment);
        zhxLikeComment.setUserId(SecurityUtils.getUserId());
        zhxLikeComment.setCreateTime(DateUtils.getNowDate());

        // 新增评论点赞互动消息
        ZhxNote zhxNote = new ZhxNote();
        // 信息类型（1接龙点赞 2评论点赞 3话题点赞 4评论 5回复）
        zhxNote.setNoteType("2");
        zhxNote.setNoteBodyId(zhxLikeComment.getCommentId());
        zhxNote.setUserId(zhxLikeComment.getUserId());
        zhxNote.setToUserId(zhxComment.getUserId());
        zhxNote.setIsRead("0");
        zhxNoteMapper.insertZhxNote(zhxNote);

        // redis数据新增
        Map<String, Long> zhxLikeCommentCache = new HashMap<>();
        zhxLikeCommentCache = redisCache.getCacheObject("zhxLikeCommentCache");
        zhxLikeCommentCache.put(zhxLikeComment.getUserId() + "-" + zhxLikeComment.getCommentId(),1L);
        redisCache.setCacheObject("zhxLikeCommentCache", zhxLikeCommentCache);

        return zhxLikeCommentMapper.insertZhxLikeComment(zhxLikeComment);
    }

    /**
     * 修改用户点赞评论
     * 
     * @param zhxLikeComment 用户点赞评论
     * @return 结果
     */
    @Override
    public int updateZhxLikeComment(ZhxLikeComment zhxLikeComment)
    {
        return zhxLikeCommentMapper.updateZhxLikeComment(zhxLikeComment);
    }

    /**
     * 批量删除用户点赞评论
     * 
     * @param likeCommentIds 需要删除的用户点赞评论主键
     * @return 结果
     */
    @Override
    public int deleteZhxLikeCommentByLikeCommentIds(Long[] likeCommentIds)
    {
        return zhxLikeCommentMapper.deleteZhxLikeCommentByLikeCommentIds(likeCommentIds);
    }

    /**
     * 删除用户点赞评论信息
     * 
     * @param likeCommentId 用户点赞评论主键
     * @return 结果
     */
    @Override
    public int deleteZhxLikeCommentByLikeCommentId(Long likeCommentId)
    {
        return zhxLikeCommentMapper.deleteZhxLikeCommentByLikeCommentId(likeCommentId);
    }

    /**
     * 删除用户点赞评论信息
     * 评论点赞数-1
     * @param likeCommentId 用户点赞评论主键
     * @return 结果
     */
    @Override
    public int deleteZhxLikeCommentByLikeCommentIdTodo(Long likeCommentId)
    {
        ZhxLikeComment zhxLikeComment = zhxLikeCommentMapper.selectZhxLikeCommentByLikeCommentId(likeCommentId);
        ZhxComment zhxComment = zhxCommentMapper.selectZhxCommentByCommentId(zhxLikeComment.getCommentId());
        zhxComment.setLikeNum(zhxComment.getLikeNum() - 1);
        zhxCommentMapper.updateZhxComment(zhxComment);

        // 删除评论点赞互动消息
        ZhxNote zhxNote = new ZhxNote();
        // 信息类型（1接龙点赞 2评论点赞 3话题点赞 4评论 5回复）
        zhxNote.setNoteType("2");
        zhxNote.setNoteBodyId(zhxLikeComment.getCommentId());
        zhxNote.setUserId(zhxLikeComment.getUserId());
        zhxNoteMapper.deleteZhxNoteByNoteInfo(zhxNote);

        // redis数据删除
        Map<String, Long> zhxLikeCommentCache = new HashMap<>();
        zhxLikeCommentCache = redisCache.getCacheObject("zhxLikeCommentCache");
        zhxLikeCommentCache.remove(zhxLikeComment.getUserId() + "-" + zhxLikeComment.getCommentId(),1L);
        redisCache.setCacheObject("zhxLikeCommentCache", zhxLikeCommentCache);

        return zhxLikeCommentMapper.deleteZhxLikeCommentByLikeCommentId(likeCommentId);
    }

}
